#include<iostream>

class Test
{
private:
    int *a;
public:
    Test();
    Test(Test& t);
    ~Test();
};

Test::Test()
{
    a= new int;
    std::cout<<"无参构造"<<std::endl;
}

Test::Test(Test& t)
{
    std::cout<<"拷贝构造"<<std::endl;
}

Test::~Test()
{
    std::cout<<"析构函数"<<std::endl;
    delete a;
}


//RVO优化： return value optimizer: 返回值优化
//当返回一个右值对象时，外部对象不会进行拷贝，而是直接拿走右值对象的资源
//形参不在RVO优化内
Test func(Test& t)
{
    return t;   //将亡值
}


int main()
{
    Test t;
    Test t1= func(t);
    //匿名对象：生命周期只有一行 Test();
    //右值：将亡值：即将要释放的对象
    //可以直接夺取右值的对象资源
    // Test t= Test(); //无参
    // Test t1(t);  //拷贝 
    // Test t3= t;   //拷贝 左值拷贝
    // Test t2=Test(); //无参  右值不拷贝
    return 0;
}